package org.study.dynamic.ds.dto;

import lombok.*;

import java.io.Serializable;
import java.util.List;

/**
 * 解析数据入参
 *
 * @author doveylovey
 * @version v1.0.0
 * @email 1135782208@qq.com
 * @date 2023年06月09日
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ParseDto implements Serializable {
    private static final long serialVersionUID = -2107429944513148588L;

    /**
     * 纯SQL执行
     */
    private String sql;

    /**
     * 模板类型编码
     */
    private Integer typeCode;

    /**
     * 表名
     */
    private String tableName;

    /**
     * 维度：对事物特征或属性的一种描述，一般情况下都为分类变量，单独分析维度是没有意义的，它依赖于指标。
     */
    private List<ParseColumnDto> dimension;

    /**
     * 指标：对事物的具体度量单位，通常情况下都可以用数值来展示
     */
    private List<ParseColumnDto> index;

    /**
     * 过滤器
     */
    private List<ParseFilterDto> filter;

    /**
     * 排序规则
     */
    private List<ParseOrderDto> orderBy;

    /**
     * TDengine特有的降采样查询。示例：
     * 按秒：SELECT _wstart, sum(current) FROM d1001 INTERVAL(1s);
     * 按分：SELECT _wstart, sum(current) FROM d1001 INTERVAL(1m);
     * 按时：SELECT _wstart, sum(current) FROM d1001 INTERVAL(1h);
     * 按日：SELECT _wstart, sum(current) FROM d1001 INTERVAL(1d);
     * 按月：SELECT _wstart, sum(current) FROM d1001 INTERVAL(1n);
     * 按年：SELECT _wstart, sum(current) FROM d1001 INTERVAL(1y);
     **/
    private String interval;
    private String intervalPattern;
    private Boolean excludeTs;

    /**
     * 数量限制
     */
    private Integer limit;
}
